home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 41.zip / BS1 part 41 / BASICS compilation.adf / finclude / AmigaExecSubs < prev    next >
Text File  |  1988-01-20  |  5KB  |  241 lines

  1. FUNCTION CreateStdIO
  2. ?
  3. ?  declared as PTR_TO IOStdReq
  4. ?
  5. ?  PURPOSE: Function allocates memory for and initializes a new
  6. ?           IO request block
  7. ?
  8. ?  EXPECTS: A PTR_TO initialized message port-used as this IO
  9. ?           request's reply port
  10. ?
  11. ?  RESULT:  A PTR_TO a new initialized IOStdRequest block.
  12. ?           Returns NIL if inadequate memory
  13. ?
  14. PARAMETER
  15.    PTR_TO MsgPort ioReplyPort
  16. LOCAL
  17.    PTR_TO IOStdReq ioStdReq
  18. IF ioReplyPort=NIL THEN
  19.    CreateStdIO=NIL
  20.    GRETURN
  21. ENDIF
  22. ioStdReq=ALLOCATE_WITH(SIZEOF(IOStdReq),MEMF_PUBLIC OR MEMF_CLEAR)
  23. IF ioStdReq=NIL THEN
  24.    CreateStdIO=NIL
  25.    GRETURN
  26. ENDIF
  27. ioStdReq.io_Message.mn_Node.ln_Type=NT_MESSAGE
  28. ioStdReq.io_Message.mn_Node.ln_Pri=0
  29. CreateStdIO=ioStdReq
  30. GRETURN
  31. END
  32. ?
  33. ?
  34. SUBROUTINE DeleteStdIO
  35. ?
  36. ?  PURPOSE: Returns memory and signal bit associated with an IO request
  37. ?
  38. ?  EXPECTS: A PTR_TO IOStdReq RECORD whose resources are to be freed
  39. ?
  40. PARAMETER
  41.    PTR_TO IOStdReq ioStdReq
  42. LOCAL
  43.    INTEGER I
  44. ioStdReq.io_Message.mn_Node.ln_Type=-1
  45. ioStdReq.io_Device=-1
  46. ioStdReq.io_Unit=-1
  47. I=DEALLOCATE(SIZEOF(IOStdReq),ioStdReq)
  48. GRETURN
  49. END
  50. ?
  51. ?
  52. FUNCTION CreatePort
  53. ?
  54. ?  declared as PTR_TO MsgPort
  55. ?
  56. ?  PURPOSE: Function allocates memory and signal bit for Port
  57. ?
  58. ?  EXPECTS: 1). PTR_TO TEXT pointing to 0-terminated text string
  59. ?               representing name of Port
  60. ?           2). BYTE priority of Port
  61. ?
  62. ?  RETURNS: PTR_TO new block
  63. ?           NIL if inadequate memory or SigBits
  64. ?
  65. PARAMETER
  66.    PTR_TO TEXT name
  67.    BYTE  pri
  68. LOCAL
  69.    BYTE  sigBit
  70.    PTR_TO MsgPort port
  71. sigBit=AllocSignal(ExecBase,-1)
  72. IF sigBit=-1 THEN
  73.    CreatePort=NIL
  74.    GRETURN
  75. ENDIF
  76. port=ALLOCATE_WITH(SIZEOF(MsgPort),MEMF_PUBLIC OR MEMF_CLEAR)
  77. IF port=NIL THEN
  78.    FreeSignal(ExecBase,sigBit)
  79.    CreatePort=NIL
  80.    GRETURN
  81. ENDIF
  82. port.mp_Node.ln_Name=name
  83. port.mp_Node.ln_Pri=pri
  84. port.mp_Node.ln_Type=NT_MSGPORT
  85. port.mp_Flags=0
  86. port.mp_SigBit=sigBit
  87. port.mp_SigTask=FindTask(ExecBase,NIL)
  88. IF name<>NIL THEN
  89.    AddPort(ExecBase,port)
  90. ELSE
  91.    NewList(@port.mp_MsgList)
  92. ENDIF
  93. CreatePort=port
  94. GRETURN
  95. END
  96. ?
  97. ?
  98. SUBROUTINE NewList
  99. ?
  100. ?  PURPOSE: To properly initialize the list header before use
  101. ?
  102. ?  EXPECTS: PTR_TO List representing the list header
  103. ?
  104. PARAMETER
  105.    PTR_TO List LH
  106. LH.lh_Head=@LH.lh_Tail
  107. LH.lh_TrailPred=@LH.lh_Head
  108. LH.lh_Tail=NIL
  109. LH.lh_Type=2
  110. GRETURN
  111. END
  112. ?
  113. ?
  114. SUBROUTINE DeletePort
  115. ?
  116. ?  PURPOSE: To deallocate memory and sigBit used by previously initialized
  117. ?           port RECORD
  118. ?
  119. ?  EXPECTS: PTR_TO MsgPort with address of port RECORD to delete
  120. ?
  121. PARAMETER
  122.    PTR_TO MsgPort port
  123. LOCAL
  124.    INTEGER I
  125. IF port.mp_Node.ln_Name<>NIL THEN RemPort(ExecBase,port)
  126. port.mp_Node.ln_Type=-1
  127. port.mp_MsgList.lh_Head=-1
  128. FreeSignal(ExecBase,port.mp_SigBit)
  129. I=DEALLOCATE(SIZEOF(MsgPort),port)
  130. GRETURN
  131. END
  132. ?
  133. ?
  134. FUNCTION CreateExtIO
  135. ?
  136. ?  PURPOSE: Allocates memory for and initializes a new IO request block
  137. ?           of a user-specified number of bytes
  138. ?
  139. ?  EXPECTS: A PTR_TO an already initialized MsgPort to be used as this
  140. ?           IO request's reply block
  141. ?
  142. ?  RETURNS: A PTR_TO IORequest pointing to the new block
  143. ?           NIL indicates inability to allocate enough memory or sigBits
  144. ?
  145. PARAMETER
  146.    PTR_TO MsgPort ioReplyPort
  147.    INTEGER size
  148. LOCAL
  149.    PTR_TO IORequest ioReq
  150. IF ioReplyPort=NIL THEN
  151.    CreateExtIO=NIL
  152.    GRETURN
  153. ENDIF
  154. ioReq=ALLOCATE_WITH(size,10000'16)
  155. IF ioReq=NIL THEN
  156.    CreateExtIO=NIL
  157.    GRETURN
  158. ENDIF
  159. ioReq.io_Message.mn_Node.ln_Type=NT_MESSAGE
  160. ioReq.io_Message.mn_Node.ln_Pri=0
  161. ioReq.io_Message.mn_ReplyPort=ioReplyPort
  162. CreateExtIO=ioReq
  163. GRETURN
  164. END
  165. ?
  166. ?
  167. SUBROUTINE DeleteExtIO
  168. ?
  169. ?  PURPOSE: Return memory allocated for extended IORequest
  170. ?
  171. ?  EXPECTS: PTR_TO IORequest block whose resources are to be freed
  172. ?           and size of block
  173. ?
  174. PARAMETER
  175.    PTR_TO IORequest ioExt
  176.    INTEGER size
  177. LOCAL
  178.    INTEGER I
  179. ioExt.io_Message.mn_Node.ln_Type=-1
  180. ioExt.io_Device=-1
  181. ioExt.io_Unit=-1
  182. I=DEALLOCATE(size,ioExt)
  183. GRETURN
  184. END
  185. ?
  186. ?
  187. FUNCTION CreateTask
  188. ?
  189. ?  PURPOSE: Initialize new Task RECORD
  190. ?
  191. ?  EXPECTS: PTR_TO Name of Task, Priority, InitialPC, and StackSize
  192. ?
  193. ?  RETURNS: PTR_TO initialized Task RECORD
  194. ?
  195. PARAMETER
  196.    PTR_TO TEXT name
  197.    BYTE        pri
  198.    INTEGER     initPC
  199.    INTEGER     stackSize
  200. LOCAL
  201.    PTR_TO Task newTask
  202.    INTEGER dataSize
  203. dataSize=(stackSize AND FFFFFC'16) + 1
  204. newTask=ALLOCATE_WITH(SIZEOF(newTask)+dataSize,10000'16)
  205. IF NOT newTask THEN
  206.    CreateTask=NIL
  207.    GRETURN
  208. ENDIF
  209. newTask.tc_SPLower=newTask+SIZEOF(newTask)
  210. newTask.tc_SPUpper=(newTask.tc_SPLower+dataSize) AND FFFFFE'16
  211. newTask.tc_SPReg=newTask.tc_SPUpper
  212. newTask.tc_Node.ln_Type=1
  213. newTask.tc_Node.ln_Pri=pri
  214. newTask.tc_Node.ln_Name=name
  215. AddTask(ExecBase,newTask,initPC,NIL)
  216. CreateTask=newTask
  217. GRETURN
  218. END
  219. ?
  220. ?
  221. SUBROUTINE DeleteTask
  222. ?
  223. ?  PURPOSE: To return the resources of a Task RECORD to the system
  224. ?
  225. ?  EXPECTS: A PTR_TO Task pointing to Task RECORD to deallocate
  226. ?
  227. PARAMETER
  228.    PTR_TO Task tc
  229. LOCAL
  230.    INTEGER I
  231. RemTask(ExecBase,tc)
  232. I=DEALLOCATE(1+tc.tc_SPUpper-tc,tc)
  233. GRETURN
  234. END
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.